package cn.youqu.happy.module.youqu.service.userTell;

import cn.youqu.happy.framework.common.pojo.PageResult;
import cn.youqu.happy.module.youqu.controller.admin.userTell.vo.UserTellCreateReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userTell.vo.UserTellExportReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userTell.vo.UserTellPageReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userTell.vo.UserTellUpdateReqVO;
import cn.youqu.happy.module.youqu.controller.app.userTell.vo.AppUserTellPublishReqVO;
import cn.youqu.happy.module.youqu.controller.app.userTell.vo.AppUserTellUpdateReqVO;
import cn.youqu.happy.module.youqu.dal.dataobject.userTell.UserTellDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 用户说说 Service 接口
 *
 * @author 王其岩 20112001045
 */
public interface UserTellService {

    /**
     * 创建用户说说 后台调用
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer createUserTell(@Valid UserTellCreateReqVO createReqVO);


    Integer publishUserTell(AppUserTellPublishReqVO publishReqVO, Long loginUserId);


    /**
     * 更新用户说说
     *
     * @param updateReqVO 更新信息
     */
    void updateUserTell(@Valid UserTellUpdateReqVO updateReqVO);

    /**
     * 删除用户说说
     *
     * @param id 编号
     */
    void deleteUserTell(Integer id);

    void deleteUserTell(Integer id, Long loginUserId);


    /**
     * 获得用户说说
     *
     * @param id 编号
     * @return 用户说说
     */
    UserTellDO getUserTell(Integer id);

    /**
     * 筛选用户可见的
     *
     * @param id
     * @param uid
     * @return
     */
    UserTellDO getUserTell(Integer id, Long uid);

    /**
     * 获得用户说说列表
     *
     * @param ids 编号
     * @return 用户说说列表
     */
    List<UserTellDO> getUserTellList(Collection<Integer> ids);

    /**
     * 筛选用户可见的
     *
     * @param ids
     * @param uid
     * @return
     */
    List<UserTellDO> getUserTellList(Collection<Integer> ids, Long uid);

    /**
     * 获得用户说说分页
     *
     * @param pageReqVO 分页查询
     * @return 用户说说分页
     */
    PageResult<UserTellDO> getUserTellPage(UserTellPageReqVO pageReqVO);

    /**
     * 筛选用户可见的
     *
     * @param pageReqVO
     * @param uid
     * @return
     */
    PageResult<UserTellDO> getUserTellPage(UserTellPageReqVO pageReqVO, Long uid);

    /**
     * 获取友说推荐广场 获取最新动态用户发布的公开说说
     *
     * @param pageReqVO
     * @param uid
     * @return
     */
    PageResult<UserTellDO> getUserTellSquarePage(UserTellPageReqVO pageReqVO, Long uid);

    /**
     * 获取队友的说说
     *
     * @param pageReqVO
     * @param uid
     * @return
     */
    PageResult<UserTellDO> getUserTellPartnerPage(UserTellPageReqVO pageReqVO, Long uid);

    /**
     * 获得用户说说列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 用户说说列表
     */
    List<UserTellDO> getUserTellList(UserTellExportReqVO exportReqVO);

    /**
     * 用户是否有拥有说说
     *
     * @param id
     * @param uid
     * @return
     */
    boolean validateUserOwnUserTell(Integer id, Long uid);

    void updateUserTell(AppUserTellUpdateReqVO updateReqVO, Long loginUserId);


    /**
     * 用户是否可见此条说说
     *
     * @param id
     * @param uid
     * @return
     */
    boolean validateUserCanSeeUserTell(Integer id, Long uid);

    /**
     * 校验是否是队友发布的说说
     *
     * @param id
     * @param uid
     * @return
     */
    boolean validatePartnerUserTell(Integer id, Long uid);

    void updateUserInfoToUserTell(String nickname,String avatar,Long uid);
}
